var curMenu = null, zTree_Menu = null;
var setting = {
    view: {
        showLine: false,
        showIcon: false,
        selectedMulti: false,
        dblClickExpand: false,
        addDiyDom: addDiyDom
    },
    async: {
        enable: true, //是否为异步加载
        url:"http://localhost:8081/base/tree/getTreeData",
        dataType: "json",
        /*
         *  //异步加载时需要自动提交父节点属性的参数。[setting.async.enable = true 时生效]
         *  1、 将需要作为参数提交的属性名称，制作成 Array 即可，例如：["id", "name"]
         *  2、可以设置提交时的参数名称，例如 server 只接受 zId : ["id=zId"]
         * */
        autoParam:["departCode","parentCode"],
        //Ajax 请求提交的静态参数键值对。[setting.async.enable = true 时生效]
        otherParam:{"root_id":"330000000000"},
        //用于对 Ajax 返回数据进行预处理的函数。[setting.async.enable = true 时生效]
        dataFilter: filter
    },
    data:{
        // keep:{
        //     parent: true
        // },
        key:{
            name:"name"
        },
        //采用简单数据类型，不必嵌套复杂json数据格式
        simpleData:{
            enable:true, ////是否之用简单数据
            idKey:"departCode",
            pIdKey:"parentCode",
            rootPId:""
        }
    },
    callback: {
        onClick: zTreeOnClick,
        beforeClick: beforeClick, //用于捕获单击节点之前的事件回调函数，并且根据返回值确定是否允许单击操作
        beforeAsync: beforeAsync, //用于捕获异步加载之前的事件回调函数，zTree 根据返回值确定是否允许进行异步加载  eg: 禁止 id 为 1 的父节点进行异步加载操作
        onAsyncError: onAsyncError, //用于捕获异步加载出现异常错误的事件回调函数。如果设置了 setting.callback.beforeAsync 方法，且返回 false，将无法触发 onAsyncSuccess / onAsyncError 事件回调函数
        onAsyncSuccess: onAsyncSuccess //用于捕获异步加载正常结束的事件回调函数 。如果设置了 setting.callback.beforeAsync 方法，且返回 false，将无法触发 onAsyncSuccess / onAsyncError 事件回调函数
    }
};

function addDiyDom(treeId, treeNode) {
    var spaceWidth = 5;
    var switchObj = $("#" + treeNode.tId + "_switch"),
        icoObj = $("#" + treeNode.tId + "_ico");
    switchObj.remove();
    icoObj.before(switchObj);

    if (treeNode.level > 1) {
        var spaceStr = "<span style='display: inline-block;width:" + (spaceWidth * treeNode.level)+ "px'></span>";
        switchObj.before(spaceStr);
    }
}

function filter(treeId, parentNode, childNodes) {
    // console.log('过滤数据!');
    //判断是否为父节点
    for (var i = 0; i < childNodes.length; i++){
        if (childNodes[i].leaf == 'N') {
            childNodes[i].isParent = true;
        }
    }
    return childNodes;
}

//点击节点
function beforeClick(treeId, treeNode) {
    if (treeNode.level == 0 ) {
        var zTree = $.fn.zTree.getZTreeObj("zTree");
        zTree.expandNode(treeNode);
        return false;
    }
    return true;
}
function zTreeOnClick(event, treeId, treeNode) {
    console.log(treeNode)
    // alert(treeNode.tId + ", " + treeNode.name);
};
//展开节点
function beforeAsync(treeId, treeNode) {
    return true;
}

function onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
    console.log('异步加载发生了错误！');
}

function onAsyncSuccess(event, treeId, treeNode, msg) {
    console.log('异步加载成功了');
}

//初始化树 一开始初始化完tree时候，让第一个父节点展开了；
function initZTree(){
    // console.log('初始化数据！');
    $.ajax({
        url: "http://localhost:8081/base/tree/getTreeData",
        type:"post",
        dataType: "json",
        cache:false, //是否缓存
        async:true,//true 异步；false 同步
        data:{
            root_id: '330000000000'
        },
        success: function(data){
            if (!data) {
                return;
            }
            var nodes = data;
            // console.log(nodes);
            //判断节点是否为父节点
            for(var i=0;i<nodes.length;i++){
                if (nodes[i].leaf == 'N') {
                    nodes[i].isParent = true;
                }/*else {
                        nodes[i].isParent = false;
                    }*/
            }
            // console.log(nodes);
            var zTreeObj = $.fn.zTree.init($("#zTree"),setting, data);

            //让第一个父节点展开
            var rootNode_0 = zTreeObj.getNodeByParam('parentCode',0,null);
            zTreeObj.expandNode(rootNode_0, true, false, false, false);


            zTree_Menu = $.fn.zTree.getZTreeObj("zTree");
            curMenu = zTree_Menu.getNodes()[0].children[0];
            zTree_Menu.selectNode(curMenu);

            $("#zTree").hover(function () {
                if (!$("#zTree").hasClass("showIcon")) {
                    $("#zTree").addClass("showIcon");
                }
            }, function() {
                $("#zTree").removeClass("showIcon");
            });
        },
        error: function(){
            alert('加载根节点发生了错误！');
        }
    });
}

//初始化树的数据
$(document).ready(function(){
    initZTree();
});
